<?php
//Ultima verificacion: 13-10-2014 ; 21-11-2014 ; 04-03-2015
class M_notificacion extends CI_Model {
	function _construct(){
		//Call the Model constructor
		parent::_construct();
	}
	
	//Este metodo se utiliza cuando queremos obtener las notificaciones activas e inactivas menos las borradas (-1)
	function buscar($restriccion=null){
		$consulta = $this->db->query("SELECT notificacion.*,
											(SELECT nombre FROM tiponotificacion WHERE tiponotificacion.idTipoNotificacion=notificacion.idTipoNotificacion AND tiponotificacion.estado<>-1 LIMIT 1) AS tipoNotificacion,
											(SELECT hash FROM archivo WHERE archivo.idArchivo=notificacion.idArchivo LIMIT 1) AS hashArchivo,
											DATE_FORMAT(notificacion.fechaPublicacion,'%d/%m/%Y') AS fechaPublicacionFormateada,
											DATE_FORMAT(notificacion.fechaCreacion,'%d/%m/%Y %H:%i:%s') AS fechaCreacionFormateada, 
											DATE_FORMAT(notificacion.fechaUltimaModificacion,'%d/%m/%Y %H:%i:%s') AS fechaUltimaModificacionFormateada											
									  FROM notificacion, ciclolectivo
									  WHERE notificacion.idCicloLectivo=ciclolectivo.idCicloLectivo AND 
											ciclolectivo.estado<>-1 AND 
											notificacion.estado<>-1 $restriccion
									  ORDER BY notificacion.titulo ASC");
		return($consulta);
	}
	
	//Este metodo se utiliza cuando queremos obtener las notificaciones activas segun los destinatarios que deban poder verla.
	function buscarActivos($restriccion=null, $limite=null){
		$consulta = $this->db->query("SELECT notificacion.*,
											(SELECT nombre FROM tiponotificacion WHERE tiponotificacion.idTipoNotificacion=notificacion.idTipoNotificacion AND tiponotificacion.estado<>-1 LIMIT 1) AS tipoNotificacion,
											(SELECT hash FROM archivo WHERE archivo.idArchivo=notificacion.idArchivo LIMIT 1) AS hashArchivo,
											DATE_FORMAT(notificacion.fechaPublicacion,'%d/%m/%Y') AS fechaPublicacionFormateada, 
											DATE_FORMAT(notificacion.fechaCreacion,'%d/%m/%Y') AS fechaCreacionFormateada,
											DATE_FORMAT(notificacion.fechaUltimaModificacion,'%d/%m/%Y %H:%i:%s') AS fechaUltimaModificacionFormateada
									  FROM notificacion, ciclolectivo, destinatarioxnotificacion
									  WHERE notificacion.idNotificacion=destinatarioxnotificacion.idNotificacion AND
											notificacion.idCicloLectivo=ciclolectivo.idCicloLectivo AND 
											notificacion.estado=1 AND
											ciclolectivo.estado<>-1 AND 
											destinatarioxnotificacion.estado=1 $restriccion
									  GROUP BY destinatarioxnotificacion.idNotificacion
									  ORDER BY notificacion.idNotificacion DESC
									  $limite");
		return($consulta);
	}
	
	//Este metodo se utiliza cuando queremos obtener las fechas de las notificaciones activas segun los destinatarios que deban poder verla.
	function buscarFechasActivas($restriccion=null, $limite=null){
		$consulta = $this->db->query("SELECT notificacion.fechaPublicacion, DATE_FORMAT(notificacion.fechaPublicacion,'%d/%m/%Y') AS fechaPublicacionFormateada							
									  FROM notificacion, ciclolectivo, destinatarioxnotificacion
									  WHERE notificacion.idNotificacion=destinatarioxnotificacion.idNotificacion AND
											notificacion.idCicloLectivo=ciclolectivo.idCicloLectivo AND 
											notificacion.estado=1 AND
											ciclolectivo.estado<>-1 AND 
											destinatarioxnotificacion.estado=1 $restriccion
									  GROUP BY notificacion.fechaPublicacion
									  ORDER BY notificacion.idNotificacion DESC
									  $limite");
		return($consulta);
	}
	
	//Este metodo se utiliza para eliminar una notificacion
	function eliminar($idNotificacion=null, $idDestructor=null){
		$consulta = $this->db->query("UPDATE `notificacion` 
									 SET `estado` = -1,
										 `idDestructor` = ". $this->db->escape($idDestructor) ."
							         WHERE `notificacion`.`idNotificacion` = " . $this->db->escape($idNotificacion) . " LIMIT 1");
		return($this->db->affected_rows());
	}
	
	//Este metodo se utiliza para crear una notificacion
	function crear($idCicloLectivo=null, $fechaPublicacion=null, $idTipoNotificacion=null, $titulo=null, $descripcion=null, $idArchivo=null, $estado=null, $idCreador=null){
		$this->db->query("INSERT INTO `notificacion` (`idNotificacion`,`idCicloLectivo`,`fechaPublicacion`,`idTipoNotificacion`,`titulo`,`descripcion`,`idArchivo`,`fechaCreacion`,`estado`,`idCreador`) VALUES 
										             (NULL,".$this->db->escape($idCicloLectivo).",".$this->db->escape($fechaPublicacion).",".$this->db->escape($idTipoNotificacion).",".$this->db->escape($titulo).",".$this->db->escape($descripcion).",".$this->db->escape($idArchivo).",now(),".$this->db->escape($estado).",".$this->db->escape($idCreador).")");
		return($this->db->affected_rows());
	}
	
	//Este metodo se utiliza cuando queremos devolver una notificacion en particular usado generalmente en el formulario de modificar o bien para
	//validar que una notificacion pasada por la url sea existente.
	function get($idNotificacion=null, $restriccion=null){
		$consulta = $this->db->query("SELECT notificacion.*, 
											(SELECT nombre FROM tiponotificacion WHERE tiponotificacion.idTipoNotificacion=notificacion.idTipoNotificacion AND tiponotificacion.estado<>-1 LIMIT 1) AS tipoNotificacion,
											(SELECT hash FROM archivo WHERE archivo.idArchivo=notificacion.idArchivo LIMIT 1) AS hashArchivo, 
											DATE_FORMAT(notificacion.fechaPublicacion,'%d/%m/%Y') AS fechaPublicacionFormateada,
											DATE_FORMAT(notificacion.fechaPublicacion,'%d-%m-%Y') AS fechaPublicacionFormateada2
									  FROM notificacion, ciclolectivo
									  WHERE notificacion.idCicloLectivo=ciclolectivo.idCicloLectivo AND
											notificacion.estado<>-1 AND 
											ciclolectivo.estado<>-1 AND 
											notificacion.idNotificacion=".$this->db->escape($idNotificacion)." $restriccion
									  LIMIT 1");
		return($consulta);
	}
	
	//Este metodo se utiliza cuando queremos devolver la notificacion contigua a una en particular usado generalmente en el formulario de modificar
	function getContiguo($idNotificacion=null, $cant=null, $idCicloLectivo=null){
		if($idCicloLectivo != 0){
			do{
				$idNotificacion+=$cant;
				$consulta = $this->db->query("SELECT notificacion.*
											  FROM notificacion
											  WHERE notificacion.idNotificacion=".$this->db->escape($idNotificacion)."
											  LIMIT 1");
				if($consulta->num_rows == 0)
					return(0);
				
			}while($consulta->row()->estado=='-1' || $consulta->row()->idCicloLectivo != $idCicloLectivo);
		}
		
		if($idCicloLectivo == 0){
			do{
				$idNotificacion+=$cant;
				$consulta = $this->db->query("SELECT notificacion.*
											  FROM notificacion
											  WHERE notificacion.idNotificacion=".$this->db->escape($idNotificacion)."
											  LIMIT 1");
				if($consulta->num_rows == 0)
					return(0);
				
			}while($consulta->row()->estado=='-1');
		}
		
		return($consulta->row()->idNotificacion);
	}
			
	//Este metodo se utiliza para modificar una notificacion
	function modificar($idNotificacion=null, $fechaPublicacion=null, $idTipoNotificacion=null, $titulo=null, $descripcion=null, $idArchivo=null, $estado=null){
		$consulta = $this->db->query("UPDATE `notificacion`
									 SET `fechaPublicacion` = ". $this->db->escape($fechaPublicacion) .",
										 `idTipoNotificacion` = ". $this->db->escape($idTipoNotificacion) .",									     
									     `titulo` = ". $this->db->escape($titulo) .",
										 `descripcion` = ". $this->db->escape($descripcion) .",
										 `idArchivo` = ". $this->db->escape($idArchivo) .",
										 `estado` = ". $this->db->escape($estado) ."
							         WHERE `notificacion`.`idNotificacion` = " . $this->db->escape($idNotificacion) . " LIMIT 1");
		return($this->db->affected_rows());
	}
}
?>